home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Ham Radio 2000
/
Ham Radio 2000.iso
/
ham2000
/
misc
/
dspice0s
/
getmx.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-11-21
|
6KB
|
173 lines
/* getmx.f -- translated by f2c (version of 3 February 1990 3:36:42).
You must link the resulting object file with the libraries:
-lF77 -lI77 -lm -lc (in that order)
*/
#include "f2c.h"
/* Common Block Declarations */
struct {
doublereal cpyknt;
integer istack[1], lorg, icore, maxcor, maxuse, memavl, ldval, numblk,
loctab, ltab, ifwa, nwoff, ntab, maxmem, memerr, nwd4, nwd8,
nwd16;
} memmgr_;
#define memmgr_1 memmgr_
/* Table of constant values */
static integer c__3 = 3;
static integer c__0 = 0;
/*< subroutine getmx(ipntr,ksize,iwsize) >*/
/* Subroutine */ int getmx_(ipntr, ksize, iwsize)
integer *ipntr, *ksize, *iwsize;
{
static integer need, madr;
extern integer locf_();
static integer morg, muse, msiz, ltab1;
extern /* Subroutine */ int copy4_();
static integer isize, jsize;
extern /* Subroutine */ int memadj_(), errmem_(), comprs_();
extern logical memptr_();
extern integer nxtmem_();
extern /* Subroutine */ int memory_();
static integer nwords;
extern integer nxtevn_();
/* Parameter adjustments */
--ipntr;
/* Function Body */
/*< implicit double precision (a-h,o-z) >*/
/* spice version 2g.6 sccsid=memmgr 3/15/83 */
/*< common /memmgr/ cpyknt,istack(1),lorg,icore,maxcor,maxuse,memavl, >*/
/*< 1 ldval,numblk,loctab,ltab,ifwa,nwoff,ntab,maxmem,memerr,nwd4, >*/
/*< 2 nwd8,nwd16 >*/
/*< logical memptr >*/
/*< dimension ipntr(1) >*/
/* *** getmem - get block */
/*< isize=ksize*iwsize >*/
isize = *ksize * *iwsize;
/* ... check for valid size */
/*< if (isize.ge.0) go to 5 >*/
if (isize >= 0) {
goto L5;
}
/*< memerr=2 >*/
memmgr_1.memerr = 2;
/*< call errmem(3,memerr,ipntr(1)) >*/
errmem_(&c__3, &memmgr_1.memerr, &ipntr[1]);
/* ... check for attempt to reallocate existing block */
/*< 5 if (.not.memptr(ipntr(1))) go to 8 >*/
L5:
if (! memptr_(&ipntr[1])) {
goto L8;
}
/*< memerr=3 >*/
memmgr_1.memerr = 3;
/*< call errmem(3,memerr,ipntr(1)) >*/
errmem_(&c__3, &memmgr_1.memerr, &ipntr[1]);
/*< 8 jsize=nxtevn(isize) >*/
L8:
jsize = nxtevn_(&isize);
/*< call comprs(0,ldval) >*/
comprs_(&c__0, &memmgr_1.ldval);
/* ... check if enough space already there */
/*< need=jsize+ntab-memavl >*/
need = jsize + memmgr_1.ntab - memmgr_1.memavl;
/*< if (need.le.0) go to 10 >*/
if (need <= 0) {
goto L10;
}
/* ... insufficient space -- bump memory size */
/*< need=nxtmem(need) >*/
need = nxtmem_(&need);
/*< icore=icore+need >*/
memmgr_1.icore += need;
/*< call memory >*/
memory_();
/*< if(memerr.ne.0) call errmem(3,memerr,ipntr(1)) >*/
if (memmgr_1.memerr != 0) {
errmem_(&c__3, &memmgr_1.memerr, &ipntr[1]);
}
/*< ltab1=ldval-ntab >*/
ltab1 = memmgr_1.ldval - memmgr_1.ntab;
/*< istack(ltab1+2)=istack(ltab1+2)+need >*/
memmgr_1.istack[ltab1 + 1] += need;
/* ... relocate block entry table */
/*< nwords=numblk*ntab >*/
nwords = memmgr_1.numblk * memmgr_1.ntab;
/*< cpyknt=cpyknt+dble(nwords) >*/
memmgr_1.cpyknt += (doublereal) nwords;
/*< call copy4(istack(loctab+1),istack(loctab+need+1),nwords) >*/
copy4_(&memmgr_1.istack[memmgr_1.loctab], &memmgr_1.istack[
memmgr_1.loctab + need], &nwords);
/*< loctab=loctab+need >*/
memmgr_1.loctab += need;
/*< ldval=ldval+need >*/
memmgr_1.ldval += need;
/*< memavl=memavl+need >*/
memmgr_1.memavl += need;
/* ... a block large enough now exists -- allocate it */
/*< 10 ltab1=ldval-ntab >*/
L10:
ltab1 = memmgr_1.ldval - memmgr_1.ntab;
/*< morg=istack(ltab1+1) >*/
morg = memmgr_1.istack[ltab1];
/*< msiz=istack(ltab1+2) >*/
msiz = memmgr_1.istack[ltab1 + 1];
/*< muse=istack(ltab1+3) >*/
muse = memmgr_1.istack[ltab1 + 2];
/*< muse=nxtevn(muse) >*/
muse = nxtevn_(&muse);
/*< madr=istack(ltab1+4) >*/
madr = memmgr_1.istack[ltab1 + 3];
/* ... construct new table entry */
/*< 15 istack(ltab1+2)=muse >*/
/* L15: */
memmgr_1.istack[ltab1 + 1] = muse;
/*< loctab=loctab-ntab >*/
memmgr_1.loctab -= memmgr_1.ntab;
/*< nwords=numblk*ntab >*/
nwords = memmgr_1.numblk * memmgr_1.ntab;
/*< cpyknt=cpyknt+dble(nwords) >*/
memmgr_1.cpyknt += (doublereal) nwords;
/*< call copy4(istack(loctab+ntab+1),istack(loctab+1),nwords) >*/
copy4_(&memmgr_1.istack[memmgr_1.loctab + memmgr_1.ntab], &
memmgr_1.istack[memmgr_1.loctab], &nwords);
/*< numblk=numblk+1 >*/
++memmgr_1.numblk;
/*< memavl=memavl-ntab >*/
memmgr_1.memavl -= memmgr_1.ntab;
/*< istack(ltab1+1)=morg+muse >*/
memmgr_1.istack[ltab1] = morg + muse;
/*< istack(ltab1+2)=msiz-muse-ntab >*/
memmgr_1.istack[ltab1 + 1] = msiz - muse - memmgr_1.ntab;
/* ... set user size into table entry for this block */
/*< 20 istack(ltab1+3)=isize >*/
/* L20: */
memmgr_1.istack[ltab1 + 2] = isize;
/*< istack(ltab1+4)=locf(ipntr(1)) >*/
memmgr_1.istack[ltab1 + 3] = locf_(&ipntr[1]);
/*< istack(ltab1+5)=iwsize >*/
memmgr_1.istack[ltab1 + 4] = *iwsize;
/*< istack(ltab1+6)=0 >*/
memmgr_1.istack[ltab1 + 5] = 0;
/*< memavl=memavl-jsize >*/
memmgr_1.memavl -= jsize;
/*< ipntr(1)=istack(ltab1+1)/iwsize >*/
ipntr[1] = memmgr_1.istack[ltab1] / *iwsize;
/*< call memadj >*/
memadj_();
/*< return >*/
return 0;
/*< end >*/
} /* getmx_ */